/**
 *	1.计算一个正数n的平方根，用连续的近似值计算，计算的值会越来越逼近正确值，
 *	第一个近似值是1,后面的近似值由下面的公式计算，写一个程序读取一个值计算并打印出它的平方根，
 *	如果你把所有的近似值打印出来，你可以看到它们快速的逼近正确值，在练习中，程序被浮点型的数据精准度限制，
 *	如果一个近似值与前一个相等，那么就停止运算
 *	ai+1 = (ai + (n/ai))/2
**/

#include <stdio.h>

float sq_root(float);

int main(void)
{
	float value;
	scanf("%f", &value);

	if(value <= 0)
	{
		printf("the value is not positive!");
		return 1;
	}
	printf("%f\n", sq_root(value));
	return 0;
}

float sq_root(float value)
{
	float p, n;
	p = 1;
	n = 0;

	while(1)
	{
		n = (p + (value / p)) / 2;
		if(p != n)
			p = n;
		else 
			break;
	} 
	return n;
}
